1 // DerelictCL - a Derelict based dynamic binding for OpenCL
2 // written in the D programming language
3 //
4 // Copyright: MeinMein 2013-2014.
5 // License:   Boost License 1.0
6 //            (See accompanying file LICENSE_1_0.txt or copy at
7 //             http://www.boost.org/LICENSE_1_0.txt)
8 // Authors:   Gerbrand Kamphuis (meinmein.com),
9 //            Marvin Meeng (meinmein.com).
10 module derelict.opencl.functions;
11 
12 private
13 {
14     import derelict.opencl.types;
15 }
16 
17 extern(System)
18 {
19     // OpenCL 1.0
20     alias nothrow cl_int function(cl_uint, cl_platform_id*, cl_uint*) da_clGetPlatformIDs;
21     alias nothrow cl_int function(cl_platform_id, cl_platform_info, size_t, void*, size_t*) da_clGetPlatformInfo;
22     alias nothrow cl_int function(cl_platform_id, cl_device_type, cl_uint, cl_device_id*, cl_uint*) da_clGetDeviceIDs;
23     alias nothrow cl_int function(cl_device_id, cl_device_info, size_t, void*, size_t*) da_clGetDeviceInfo;
24     alias nothrow cl_context function(const(cl_context_properties*), cl_uint, const(cl_device_id*), void function(const(char*),  const(void*),  size_t,  void*), void*, cl_int*) da_clCreateContext;
25     alias nothrow cl_context function(const(cl_context_properties*), cl_device_type, void function(const(char*),  const(void*),  size_t,  void*), void*, cl_int*) da_clCreateContextFromType;
26     alias nothrow cl_int function(cl_context) da_clRetainContext;
27     alias nothrow cl_int function(cl_context) da_clReleaseContext;
28     alias nothrow cl_int function(cl_context, cl_context_info, size_t, void*, size_t*) da_clGetContextInfo;
29     alias nothrow cl_command_queue function(cl_context, cl_device_id, cl_command_queue_properties, cl_int*) da_clCreateCommandQueue;
30     alias nothrow cl_int function(cl_command_queue) da_clRetainCommandQueue;
31     alias nothrow cl_int function(cl_command_queue) da_clReleaseCommandQueue;
32     alias nothrow cl_int function(cl_command_queue, cl_command_queue_info, size_t, void*, size_t*) da_clGetCommandQueueInfo;
33     alias nothrow cl_mem function(cl_context, cl_mem_flags, size_t, void*, cl_int*) da_clCreateBuffer;
34     alias nothrow cl_int function(cl_mem) da_clRetainMemObject;
35     alias nothrow cl_int function(cl_mem) da_clReleaseMemObject;
36     alias nothrow cl_int function(cl_context, cl_mem_flags, cl_mem_object_type, cl_uint, cl_image_format*, cl_uint*) da_clGetSupportedImageFormats;
37     alias nothrow cl_int function(cl_mem, cl_mem_info, size_t, void*, size_t*) da_clGetMemObjectInfo;
38     alias nothrow cl_int function(cl_mem, cl_image_info, size_t, void*, size_t*) da_clGetImageInfo;
39     alias nothrow cl_sampler function(cl_context, cl_bool, cl_addressing_mode, cl_filter_mode, cl_int*) da_clCreateSampler;
40     alias nothrow cl_int function(cl_sampler) da_clRetainSampler;
41     alias nothrow cl_int function(cl_sampler) da_clReleaseSampler;
42     alias nothrow cl_int function(cl_sampler, cl_sampler_info, size_t, void*, size_t*) da_clGetSamplerInfo;
43     alias nothrow cl_program function(cl_context, cl_uint, const(char*)*, const(size_t*), cl_int*) da_clCreateProgramWithSource;
44     alias nothrow cl_program function(cl_context, cl_uint, const(cl_device_id*), const(size_t*), const(ubyte*)*, cl_int*, cl_int*) da_clCreateProgramWithBinary;
45     alias nothrow cl_program function(cl_context, cl_uint, const(cl_device_id*), const(char*), cl_int*) da_clCreateProgramWithBuiltInKernels;
46     alias nothrow cl_int function(cl_program) da_clRetainProgram;
47     alias nothrow cl_int function(cl_program) da_clReleaseProgram;
48     alias nothrow cl_int function(cl_program, cl_uint, const(cl_device_id*), const(char*), void function(cl_program, void*), void*) da_clBuildProgram;
49     alias nothrow cl_int function(cl_program, cl_program_info, size_t, void*, size_t*) da_clGetProgramInfo;
50     alias nothrow cl_int function(cl_program, cl_device_id, cl_program_build_info, size_t, void*, size_t*) da_clGetProgramBuildInfo;
51     alias nothrow cl_kernel function(cl_program, const(char*), cl_int*) da_clCreateKernel;
52     alias nothrow cl_int function(cl_program, cl_uint, cl_kernel*, cl_uint*) da_clCreateKernelsInProgram;
53     alias nothrow cl_int function(cl_kernel) da_clRetainKernel;
54     alias nothrow cl_int function(cl_kernel) da_clReleaseKernel;
55     alias nothrow cl_int function(cl_kernel, cl_uint, size_t, const(void*)) da_clSetKernelArg;
56     alias nothrow cl_int function(cl_kernel, cl_kernel_info, size_t, void*, size_t*) da_clGetKernelInfo;
57     alias nothrow cl_int function(cl_kernel, cl_uint, cl_kernel_arg_info, size_t, void*, size_t*) da_clGetKernelArgInfo;
58     alias nothrow cl_int function(cl_kernel, cl_device_id, cl_kernel_work_group_info, size_t, void*, size_t*) da_clGetKernelWorkGroupInfo;
59     alias nothrow cl_int function(cl_uint, const(cl_event*)) da_clWaitForEvents;
60     alias nothrow cl_int function(cl_event, cl_event_info, size_t, void*, size_t*) da_clGetEventInfo;
61     alias nothrow cl_int function(cl_event) da_clRetainEvent;
62     alias nothrow cl_int function(cl_event) da_clReleaseEvent;
63     alias nothrow cl_int function(cl_event, cl_profiling_info, size_t, void*, size_t*) da_clGetEventProfilingInfo;
64     alias nothrow cl_int function(cl_command_queue) da_clFlush;
65     alias nothrow cl_int function(cl_command_queue) da_clFinish;
66     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, size_t, size_t, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueReadBuffer;
67     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, size_t, size_t, const(void*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueWriteBuffer;
68     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, size_t, size_t, size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyBuffer;
69     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), size_t, size_t, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueReadImage;
70     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), size_t, size_t, const(void*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueWriteImage;
71     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, const(size_t*), const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyImage;
72     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, const(size_t*), const(size_t*), size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyImageToBuffer;
73     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, size_t, const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyBufferToImage;
74     alias nothrow void* function(cl_command_queue, cl_mem, cl_bool, cl_map_flags, size_t, size_t, cl_uint, const(cl_event*), cl_event*, cl_int*) da_clEnqueueMapBuffer;
75     alias nothrow void* function(cl_command_queue, cl_mem, cl_bool, cl_map_flags, const(size_t*), const(size_t*), size_t*, size_t*, cl_uint, const(cl_event*), cl_event*, cl_int*) da_clEnqueueMapImage;
76     alias nothrow cl_int function(cl_command_queue, cl_mem, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueUnmapMemObject;
77     alias nothrow cl_int function(cl_command_queue, cl_kernel, cl_uint, const(size_t*), const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueNDRangeKernel;
78     alias nothrow cl_int function(cl_command_queue, cl_kernel, cl_uint, const(cl_event*), cl_event*) da_clEnqueueTask;
79     alias nothrow cl_int function(cl_command_queue, void function(void*), void*, size_t, cl_uint, const(cl_mem*), const(void*)*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueNativeKernel;
80     // OpenCL 1.0 Deprecated in 1.1
81     alias nothrow cl_int function(cl_command_queue, cl_command_queue_properties, cl_bool, cl_command_queue_properties*) da_clSetCommandQueueProperty;
82     // OpenCL 1.1
83     alias nothrow cl_mem function(cl_mem, cl_mem_flags, cl_buffer_create_type, const(void*), cl_int*) da_clCreateSubBuffer;
84     alias nothrow cl_int function(cl_mem, void function(cl_mem, void*), void*) da_clSetMemObjectDestructorCallback;
85     alias nothrow cl_event function(cl_context, cl_int*) da_clCreateUserEvent;
86     alias nothrow cl_int function(cl_event, cl_int) da_clSetUserEventStatus;
87     alias nothrow cl_int function( cl_event, cl_int, void function(cl_event,  cl_int,  void*), void*) da_clSetEventCallback;
88     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), const(size_t*), size_t, size_t, size_t, size_t, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueReadBufferRect;
89     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), const(size_t*), size_t, size_t, size_t, size_t, const(void*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueWriteBufferRect;
90     alias nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, const(size_t*), const(size_t*), const(size_t*), size_t, size_t, size_t, size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyBufferRect;
91     // OpenCL 1.1 Deprecated in 1.2
92     alias nothrow cl_mem function(cl_context, cl_mem_flags, const(cl_image_format*), size_t, size_t, size_t, void*, cl_int*) da_clCreateImage2D;
93     alias nothrow cl_mem function(cl_context, cl_mem_flags, const(cl_image_format*), size_t, size_t, size_t, size_t, size_t, void*, cl_int*) da_clCreateImage3D;
94     alias nothrow cl_int function(cl_command_queue, cl_event*) da_clEnqueueMarker;
95     alias nothrow cl_int function(cl_command_queue, cl_uint, const(cl_event*)) da_clEnqueueWaitForEvents;
96     alias nothrow cl_int function(cl_command_queue) da_clEnqueueBarrier;
97     alias nothrow cl_int function() da_clUnloadCompiler;
98     alias nothrow void* function(const(char*)) da_clGetExtensionFunctionAddress;
99     // OpenCL 1.2
100     alias nothrow cl_int function(cl_device_id, const(cl_device_partition_property*), cl_uint, cl_device_id*, cl_uint*) da_clCreateSubDevices;
101     alias nothrow cl_int function(cl_device_id) da_clRetainDevice;
102     alias nothrow cl_int function(cl_device_id) da_clReleaseDevice;
103     alias nothrow cl_mem function(cl_context, cl_mem_flags, const(cl_image_format*), const(cl_image_desc*), void*, cl_int*) da_clCreateImage;
104     alias nothrow cl_int function(cl_program, cl_uint, const(cl_device_id*), const(char*), cl_uint, const(cl_program*), const(char*)*, void function(cl_program, void*), void*) da_clCompileProgram;
105     alias nothrow cl_program function(cl_context, cl_uint, const(cl_device_id*), const(char*), cl_uint, const(cl_program*), void function(cl_program, void*), void*, cl_int* ) da_clLinkProgram;
106     alias nothrow cl_int function(cl_platform_id) da_clUnloadPlatformCompiler;
107     alias nothrow cl_int function(cl_command_queue, cl_mem, const(void*), size_t, size_t, size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueFillBuffer;
108     alias nothrow cl_int function(cl_command_queue, cl_mem, const(void*), const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueFillImage;
109     alias nothrow cl_int function(cl_command_queue, cl_uint, const(cl_mem*), cl_mem_migration_flags, cl_uint, const(cl_event*), cl_event*) da_clEnqueueMigrateMemObjects;
110     alias nothrow cl_int function(cl_command_queue, cl_uint, const(cl_event*), cl_event*) da_clEnqueueMarkerWithWaitList;
111     alias nothrow cl_int function(cl_command_queue, cl_uint, const(cl_event*), cl_event*) da_clEnqueueBarrierWithWaitList;
112     alias nothrow void* function(cl_platform_id, const(char*)) da_clGetExtensionFunctionAddressForPlatform;
113 }
114 
115 __gshared
116 {
117     // OpenCL 1.0
118     da_clGetPlatformIDs clGetPlatformIDs;
119     da_clGetPlatformInfo clGetPlatformInfo;
120     da_clGetDeviceIDs clGetDeviceIDs;
121     da_clGetDeviceInfo clGetDeviceInfo;
122     da_clCreateContext clCreateContext;
123     da_clCreateContextFromType clCreateContextFromType;
124     da_clRetainContext clRetainContext;
125     da_clReleaseContext clReleaseContext;
126     da_clGetContextInfo clGetContextInfo;
127     da_clCreateCommandQueue clCreateCommandQueue;
128     da_clRetainCommandQueue clRetainCommandQueue;
129     da_clReleaseCommandQueue clReleaseCommandQueue;
130     da_clGetCommandQueueInfo clGetCommandQueueInfo;
131     da_clCreateBuffer clCreateBuffer;
132     da_clRetainMemObject clRetainMemObject;
133     da_clReleaseMemObject clReleaseMemObject;
134     da_clGetSupportedImageFormats clGetSupportedImageFormats;
135     da_clGetMemObjectInfo clGetMemObjectInfo;
136     da_clGetImageInfo clGetImageInfo;
137     da_clCreateSampler clCreateSampler;
138     da_clRetainSampler clRetainSampler;
139     da_clReleaseSampler clReleaseSampler;
140     da_clGetSamplerInfo clGetSamplerInfo;
141     da_clCreateProgramWithSource clCreateProgramWithSource;
142     da_clCreateProgramWithBinary clCreateProgramWithBinary;
143     da_clRetainProgram clRetainProgram;
144     da_clReleaseProgram clReleaseProgram;
145     da_clBuildProgram clBuildProgram;
146     da_clGetProgramInfo clGetProgramInfo;
147     da_clGetProgramBuildInfo clGetProgramBuildInfo;
148     da_clCreateKernel clCreateKernel;
149     da_clCreateKernelsInProgram clCreateKernelsInProgram;
150     da_clRetainKernel clRetainKernel;
151     da_clReleaseKernel clReleaseKernel;
152     da_clSetKernelArg clSetKernelArg;
153     da_clGetKernelInfo clGetKernelInfo;
154     da_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo;
155     da_clWaitForEvents clWaitForEvents;
156     da_clGetEventInfo clGetEventInfo;
157     da_clRetainEvent clRetainEvent;
158     da_clReleaseEvent clReleaseEvent;
159     da_clGetEventProfilingInfo clGetEventProfilingInfo;
160     da_clFlush clFlush;
161     da_clFinish clFinish;
162     da_clEnqueueReadBuffer clEnqueueReadBuffer;
163     da_clEnqueueWriteBuffer clEnqueueWriteBuffer;
164     da_clEnqueueCopyBuffer clEnqueueCopyBuffer;
165     da_clEnqueueReadImage clEnqueueReadImage;
166     da_clEnqueueWriteImage clEnqueueWriteImage;
167     da_clEnqueueCopyImage clEnqueueCopyImage;
168     da_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer;
169     da_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage;
170     da_clEnqueueMapBuffer clEnqueueMapBuffer;
171     da_clEnqueueMapImage clEnqueueMapImage;
172     da_clEnqueueUnmapMemObject clEnqueueUnmapMemObject;
173     da_clEnqueueNDRangeKernel clEnqueueNDRangeKernel;
174     da_clEnqueueTask clEnqueueTask;
175     da_clEnqueueNativeKernel clEnqueueNativeKernel;
176     // OpenCL 1.0 Deprecated in 1.1
177     da_clSetCommandQueueProperty clSetCommandQueueProperty;
178     // OpenCL 1.1
179     da_clCreateSubBuffer clCreateSubBuffer;
180     da_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback;
181     da_clCreateUserEvent clCreateUserEvent;
182     da_clSetUserEventStatus clSetUserEventStatus;
183     da_clSetEventCallback clSetEventCallback;
184     da_clEnqueueReadBufferRect clEnqueueReadBufferRect;
185     da_clEnqueueWriteBufferRect clEnqueueWriteBufferRect;
186     da_clEnqueueCopyBufferRect clEnqueueCopyBufferRect;
187     // OpenCL 1.1 Deprecated in 1.2
188     da_clCreateImage2D clCreateImage2D;
189     da_clCreateImage3D clCreateImage3D;
190     da_clEnqueueMarker clEnqueueMarker;
191     da_clEnqueueWaitForEvents clEnqueueWaitForEvents;
192     da_clEnqueueBarrier clEnqueueBarrier;
193     da_clUnloadCompiler clUnloadCompiler;
194     da_clGetExtensionFunctionAddress clGetExtensionFunctionAddress;
195     // OpenCL 1.2
196     da_clCreateSubDevices clCreateSubDevices;
197     da_clRetainDevice clRetainDevice;
198     da_clReleaseDevice clReleaseDevice;
199     da_clCreateImage clCreateImage;
200     da_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels;
201     da_clCompileProgram clCompileProgram;
202     da_clLinkProgram clLinkProgram;
203     da_clUnloadPlatformCompiler clUnloadPlatformCompiler;
204     da_clGetKernelArgInfo clGetKernelArgInfo;
205     da_clEnqueueFillBuffer clEnqueueFillBuffer;
206     da_clEnqueueFillImage clEnqueueFillImage;
207     da_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects;
208     da_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList;
209     da_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList;
210     da_clGetExtensionFunctionAddressForPlatform clGetExtensionFunctionAddressForPlatform;
211 }